package learn.up.java.basic;

import org.junit.Test;

/**
 由于无穷大、NaN 和 0 的特殊行为，当应用浮点数时，可能看似无害的转换和优化实际上是不正确的。
 例如，虽然好象 0.0-f 很明显等于 -f ，但当 f 为 0 时，这是不正确的。
 * @author NANUTO
 * @date 2017年11月29日 下午11:49:59
 */
public class MathDemo {

	@Test
	public void sqrt() {
		//返回 NaN
		System.out.println(Math.sqrt(-1));  
		System.out.println(0.0 / 0.0);
		System.out.println(Double.NaN + 1);
		//返回正无穷大 Infinity
		System.out.println(1.0 / 0.0);
		//返回负无穷大  -Infinity
		System.out.println(-1.0 / 0.0);
//		System.out.println( 0.0 == -0.0);	//返回true
		System.out.println(Double.compare(0.0, -0.0));  //返回1，即0.0 > -0.0
		
	}
	
	@Test
	public void nan() {
		//判断是否是NaN,或Infinity
		System.out.println(Double.isNaN(Double.NaN));
		System.out.println(Double.isInfinite(1.0 / 0.0));
		System.out.println(Double.isInfinite(Double.POSITIVE_INFINITY));
		System.out.println(Double.isInfinite(Double.NEGATIVE_INFINITY));
	}
	
	@Test
	public void bool() {
		// 返回false,NaN即不大于0也不小于0，两个NaN也不相等	
		System.out.println(Double.NaN > 0); 
		System.out.println(Double.NaN < 0); 
		System.out.println(Double.NaN == Double.NaN);
		System.out.println(Double.POSITIVE_INFINITY > Double.POSITIVE_INFINITY);
		//返回true
		System.out.println(Double.POSITIVE_INFINITY == Double.POSITIVE_INFINITY);
		System.out.println(Double.POSITIVE_INFINITY > 0);
		System.out.println(Double.NEGATIVE_INFINITY < 0);
	}
}
